跳到主要内容

Go 踩坑记录

Context 的上下文问题

平时使用的很多中间件框架都要求在使用时传递一个 Context,而这个 Context 内的 ValueMap 存的是指针,所以需要深拷贝

defer 的坑

因为 defer 工作原理是将一个闭包压到最后执行,所以当闭包有入参时,会先执行这个入参(函数)

所以像这个 file.Close() 就会被当成入参,优先执行

func main() {
// ...
defer handError(file.Close())
// ...
}

func handError(err error) {
if err != nil {
log.Fatal(err.Error())
}
}

应该改成:

// ...
defer func() {
handError(f.Close())
}()